home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amigappc / libsrc / stdio / _putbuf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  862 b   |  34 lines

  1. /*
  2. ** vbcc-Amiga-PowerPC version of _putbuf.c
  3. **
  4. ** v0.1 04.10.97 phx
  5. */
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <powerup/gcclib/powerup_protos.h>
  10.  
  11. /* write data from buffer */
  12. /* inserts c as a new character, if c!=EOF */
  13. int _putbuf(int c,FILE *f)
  14. {
  15.     _chkabort();
  16.     if(!f) return(EOF);
  17.     if((f->flags&(_WRITEABLE|_READ|_EOF|_ERR))!=_WRITEABLE) return(EOF);
  18.     if(!f->bufsize){if(f->flags&_UNBUF) f->bufsize=1; else f->bufsize=BUFSIZ;}
  19.     if(!f->base){
  20.         if(!(f->base=(char *)malloc(f->bufsize+1)+1))
  21.             return(EOF);
  22.     }else{
  23.         int len=f->pointer-f->base;
  24.         if(f->flags&_WRITE)
  25.          if(PPCWrite((BPTR)f->filehandle,f->base,len)!=len) return(EOF);
  26.     }
  27.     f->flags|=_WRITE;
  28.     f->pointer=f->base;
  29.     f->count=f->bufsize;
  30.     *f->pointer++=c;
  31.     f->count--;
  32.     return(0);  /*  hier noch ueberlegen    */
  33. }
  34.